﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Demo_G.O.S.E.ServerEngine.Skill
{
    public class SkillInfo
    {
        private int m_SkillID;
        private string m_Name;
        private string m_Title;
        private double m_StrGain;
        private double m_DexGain;
        private double m_IntGain;
        private double m_StrScale;
        private double m_DexScale;
        private double m_IntScale;
        private double m_StatTotal;
        private double m_GainFactor;
        private SkillUseCallback m_Callback;

        public SkillInfo( int skillID, string name, double strScale, double dexScale, double intScale, string title, SkillUseCallback callback, double strGain, double dexGain, double intGain, double gainFactor )
        {
            m_Name = name;
            m_Title = title;
            m_SkillID = skillID;
            m_StrScale = strScale / 100.0;
            m_DexScale = dexScale / 100.0;
            m_IntScale = intScale / 100.0;
            m_Callback = callback;
            m_StrGain = strGain;
            m_DexGain = dexGain;
            m_IntGain = intGain;
            m_GainFactor = gainFactor;

            m_StatTotal = strScale + dexScale + intScale;
        }

        public SkillUseCallback Callback
        {
            get { return m_Callback; }
            set { m_Callback = value; }
        }

        public int SkillID
        {
            get { return m_SkillID; }
        }

        public string Name
        {
            get { return m_Name; }
            set { m_Name = value; }
        }

        public string Title
        {
            get { return m_Title; }
            set { m_Title = value; }
        }

        public double StrScale
        {
            get { return m_StrScale; }
            set { m_StrScale = value; }
        }

        public double DexScale
        {
            get { return m_DexScale; }
            set { m_DexScale = value; }
        }

        public double IntScale
        {
            get { return m_IntScale; }
            set { m_IntScale = value; }
        }

        public double StatTotal
        {
            get { return m_StatTotal; }
            set { m_StatTotal = value; }
        }

        public double StrGain
        {
            get { return m_StrGain; }
            set { m_StrGain = value; }
        }

        public double DexGain
        {
            get { return m_DexGain; }
            set { m_DexGain = value; }
        }

        public double IntGain
        {
            get { return m_IntGain; }
            set { m_IntGain = value; }
        }

        public double GainFactor
        {
            get { return m_GainFactor; }
            set { m_GainFactor = value; }
        }

        private static SkillInfo[] m_Table = new SkillInfo[55]
			{
				new SkillInfo(  0, "Alchemy",					0.0,	5.0,	5.0,	"Alchemist",	null,	0.0,	0.5,	0.5,	1.0 ),
				new SkillInfo(  1, "Anatomy",					0.0,	0.0,	0.0,	"Healer",		null,	0.15,	0.15,	0.7,	1.0 ),
				new SkillInfo(  2, "Animal Lore",				0.0,	0.0,	0.0,	"Ranger",		null,	0.0,	0.0,	1.0,	1.0 ),
				new SkillInfo(  3, "Item Identification",		0.0,	0.0,	0.0,	"Merchant",		null,	0.0,	0.0,	1.0,	1.0 ),
				new SkillInfo(  4, "Arms Lore",					0.0,	0.0,	0.0,	"Warrior",		null,	0.75,	0.15,	0.1,	1.0 ),
				new SkillInfo(  5, "Parrying",					7.5,	2.5,	0.0,	"Warrior",		null,	0.75,	0.25,	0.0,	1.0 ),
				new SkillInfo(  6, "Begging",					0.0,	0.0,	0.0,	"Beggar",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo(  7, "Blacksmithy",				10.0,	0.0,	0.0,	"Smith",		null,	1.0,	0.0,	0.0,	1.0 ),
				new SkillInfo(  8, "Bowcraft/Fletching",		6.0,	16.0,	0.0,	"Bowyer",		null,	0.6,	1.6,	0.0,	1.0 ),
				new SkillInfo(  9, "Peacemaking",				0.0,	0.0,	0.0,	"Bard",			null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 10, "Camping",					20.0,	15.0,	15.0,	"Ranger",		null,	2.0,	1.5,	1.5,	1.0 ),
				new SkillInfo( 11, "Carpentry",					20.0,	5.0,	0.0,	"Carpenter",	null,	2.0,	0.5,	0.0,	1.0 ),
				new SkillInfo( 12, "Cartography",				0.0,	7.5,	7.5,	"Cartographer",	null,	0.0,	0.75,	0.75,	1.0 ),
				new SkillInfo( 13, "Cooking",					0.0,	20.0,	30.0,	"Chef",			null,	0.0,	2.0,	3.0,	1.0 ),
				new SkillInfo( 14, "Detecting Hidden",			0.0,	0.0,	0.0,	"Scout",		null,	0.0,	0.4,	0.6,	1.0 ),
				new SkillInfo( 15, "Discordance",				0.0,	2.5,	2.5,	"Bard",			null,	0.0,	0.25,	0.25,	1.0 ),
				new SkillInfo( 16, "Evaluating Intelligence",	0.0,	0.0,	0.0,	"Scholar",		null,	0.0,	0.0,	1.0,	1.0 ),
				new SkillInfo( 17, "Healing",					6.0,	6.0,	8.0,	"Healer",		null,	0.6,	0.6,	0.8,	1.0 ),
				new SkillInfo( 18, "Fishing",					0.0,	0.0,	0.0,	"Fisherman",	null,	0.5,	0.5,	0.0,	1.0 ),
				new SkillInfo( 19, "Forensic Evaluation",		0.0,	0.0,	0.0,	"Detective",	null,	0.0,	0.2,	0.8,	1.0 ),
				new SkillInfo( 20, "Herding",					16.25,	6.25,	2.5,	"Shepherd",		null,	1.625,	0.625,	0.25,	1.0 ),
				new SkillInfo( 21, "Hiding",					0.0,	0.0,	0.0,	"Rogue",		null,	0.0,	0.8,	0.2,	1.0 ),
				new SkillInfo( 22, "Provocation",				0.0,	4.5,	0.5,	"Bard",			null,	0.0,	0.45,	0.05,	1.0 ),
				new SkillInfo( 23, "Inscription",				0.0,	2.0,	8.0,	"Scribe",		null,	0.0,	0.2,	0.8,	1.0 ),
				new SkillInfo( 24, "Lockpicking",				0.0,	25.0,	0.0,	"Rogue",		null,	0.0,	2.0,	0.0,	1.0 ),
				new SkillInfo( 25, "Magery",					0.0,	0.0,	15.0,	"Mage",			null,	0.0,	0.0,	1.5,	1.0 ),
				new SkillInfo( 26, "Resisting Spells",			0.0,	0.0,	0.0,	"Mage",			null,	0.25,	0.25,	0.5,	1.0 ),
				new SkillInfo( 27, "Tactics",					0.0,	0.0,	0.0,	"Warrior",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 28, "Snooping",					0.0,	25.0,	0.0,	"Pickpocket",	null,	0.0,	2.5,	0.0,	1.0 ),
				new SkillInfo( 29, "Musicianship",				0.0,	0.0,	0.0,	"Bard",			null,	0.0,	0.8,	0.2,	1.0 ),
				new SkillInfo( 30, "Poisoning",					0.0,	4.0,	16.0,	"Assassin",		null,	0.0,	0.4,	1.6,	1.0 ),
				new SkillInfo( 31, "Archery",					2.5,	7.5,	0.0,	"Archer",		null,	0.25,	0.75,	0.0,	1.0 ),
				new SkillInfo( 32, "Spirit Speak",				0.0,	0.0,	0.0,	"Medium",		null,	0.0,	0.0,	1.0,	1.0 ),
				new SkillInfo( 33, "Stealing",					0.0,	10.0,	0.0,	"Rogue",		null,	0.0,	1.0,	0.0,	1.0 ),
				new SkillInfo( 34, "Tailoring",					3.75,	16.25,	5.0,	"Tailor",		null,	0.38,	1.63,	0.5,	1.0 ),
				new SkillInfo( 35, "Animal Taming",				14.0,	2.0,	4.0,	"Tamer",		null,	1.4,	0.2,	0.4,	1.0 ),
				new SkillInfo( 36, "Taste Identification",		0.0,	0.0,	0.0,	"Chef",			null,	0.2,	0.0,	0.8,	1.0 ),
				new SkillInfo( 37, "Tinkering",					5.0,	2.0,	3.0,	"Tinker",		null,	0.5,	0.2,	0.3,	1.0 ),
				new SkillInfo( 38, "Tracking",					0.0,	12.5,	12.5,	"Ranger",		null,	0.0,	1.25,	1.25,	1.0 ),
				new SkillInfo( 39, "Veterinary",				8.0,	4.0,	8.0,	"Veterinarian",	null,	0.8,	0.4,	0.8,	1.0 ),
				new SkillInfo( 40, "Swordsmanship",				7.5,	2.5,	0.0,	"Swordsman",	null,	0.75,	0.25,	0.0,	1.0 ),
				new SkillInfo( 41, "Mace Fighting",				9.0,	1.0,	0.0,	"Armsman",		null,	0.9,	0.1,	0.0,	1.0 ),
				new SkillInfo( 42, "Fencing",					4.5,	5.5,	0.0,	"Fencer",		null,	0.45,	0.55,	0.0,	1.0 ),
				new SkillInfo( 43, "Wrestling",					9.0,	1.0,	0.0,	"Wrestler",		null,	0.9,	0.1,	0.0,	1.0 ),
				new SkillInfo( 44, "Lumberjacking",				20.0,	0.0,	0.0,	"Lumberjack",	null,	2.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 45, "Mining",					20.0,	0.0,	0.0,	"Miner",		null,	2.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 46, "Meditation",				0.0,	0.0,	0.0,	"Stoic",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 47, "Stealth",					0.0,	0.0,	0.0,	"Rogue",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 48, "Remove Trap",				0.0,	0.0,	0.0,	"Rogue",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 49, "Necromancy",				0.0,	0.0,	0.0,	"Necromancer",	null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 50, "Focus",						0.0,	0.0,	0.0,	"Stoic",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 51, "Chivalry",					0.0,	0.0,	0.0,	"Paladin",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 52, "Bushido",					0.0,	0.0,	0.0,	"Samurai",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 53, "Ninjitsu",					0.0,	0.0,	0.0,	"Ninja",		null,	0.0,	0.0,	0.0,	1.0 ),
				new SkillInfo( 54, "Spellweaving",				0.0,	0.0,	0.0,	"Arcanist",		null,	0.0,	0.0,	0.0,	1.0 ),
			};

        public static SkillInfo[] Table
        {
            get { return m_Table; }
            set { m_Table = value; }
        }
    }
}

